package DB;
import java.sql.*;
/**
 *
 * @author Stefan Fellner
 */


/**
 * Verwalten einer Verbindung zur Datenbank.<p>
 * <b>Vorteil:</b> Sehr einfacher Verbindungsaufbau zur Datenbank.<p>
 * <b>Nachteil:</b> Durch die Singleton-Eigenschaft der Klasse kann nur auf eine
 * fest vorgegebene Datenbank zugegriffen werden.<p>
 * Quelle: Prof.Dr.Thies, BankProjekt
*/
public class ConnectionManager {

/*
 * Diese Variable ist durch den Bezeichner <code>static</code> nur einmal für
 * sämtliche eventuellen Instanzen dieser Klasse vorhanden. Sie speichert die
 * einzige Instanz dieser Klasse.
 * Quelle: Prof.Dr.Thies, BankProjekt
 * */
    private static ConnectionManager instance = null;

    //Konstruktor, der bei der Erstellung des ConnectionManager Objekts aufgerufen wird.
    private ConnectionManager(){
        System.out.println("Connection Objekt wurde erzeugt");
    }

    /** Eine Zugriffsmethode auf Klassenebene, welches einmal ein konkretes
        Objekt erzeugt und dieses zurückliefert.**/
    public static ConnectionManager getInstance(){
        if(instance == null){
            instance = new ConnectionManager();
        }
        return instance;
    }
    /**Connection ist ein Interface im java.sql package.
     * Dient als Hilfsmittel, um mit dem ConnectionManager Objekt umgehen zu können.
     * Beinhaltet diverse Operationen um ein Arbeiten zu ermöglichen, z.B createStatement()
     */
    private static Connection con = null;

    //Diese URL zeigt auf die Datenbank des mars.iuk.hdm-stuttgart.de Servers
    private static final String URL = "jdbc:mysql://mars.iuk.hdm-stuttgart.de/u-sf045?user=sf045&password=uuKohqu4ie&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull";
    //für den Fall dass keine Internetverbindung vorhanden ist, muss folgende Datenbank verwendet werden (vorausgesetzt XAMPP hat die unten angegebene Datenbank mit Tabellen und läuft als Windowsprozess auf dem localhost)
    //private static final String URL = "jdbc:mysql://localhost/u-sf045?user=root&password=&characterEncoding=UTF8";


    // Mittels dem Connection Objekt eine Verbindung mit der DB herstellen
    public  Connection getConnection() {
		// Wenn es bisher keine Conncetion zur DB gab, ...
		if (con == null ) {
			try {
				// Zuerst muß der passende DB-Treiber geladen werden
				Class.forName("com.mysql.jdbc.Driver").newInstance();
                                System.out.println("Treiber ok!");

				/*
				 * Dann erst kann uns der DriverManager eine Verbindung mit den oben
				 * in der Variable url angegebenen Verbindungsinformationen aufbauen.
				 *
				 * Diese Verbindung wird dann in der statischen Variable con
				 * abgespeichert und fortan verwendet.
				 */
				con = DriverManager.getConnection(ConnectionManager.URL);
                                System.out.println("Verbindung zur Datenbank hergestellt");

			}
			catch (SQLException e1) {
				con = null;
				e1.printStackTrace();
			}
			catch (InstantiationException e) {
				con = null;
				e.printStackTrace();
			}
			catch (IllegalAccessException e) {
				con = null;
				e.printStackTrace();
			}
			catch (ClassNotFoundException e) {
				con = null;
				e.printStackTrace();
			}
		}

		// Zurückgegeben der Verbindung

		return con;
	}


        /**
         * Schließt die Datenbankverbindung. 
         * @param Das Connection Objekt, welches die Verbindung zur DB hält
         */
    void closeConnection(Connection con) {
        
    }


}
